package com.yungu.swift.order.model.vo;

import com.yungu.swift.base.model.BaseVo;
import com.yungu.swift.base.model.annotation.AbsoluteImgPath;
import com.yungu.swift.base.model.annotation.Desensitization;
import com.yungu.swift.lbs.model.DriverLocation;
import com.yungu.swift.lbs.model.OrderEventPoint;
import com.yungu.swift.lbs.model.dto.LatLngDto;
import com.yungu.swift.lbs.model.vo.OrderLocationVo;
import com.yungu.swift.order.model.dto.OrderOperateLogDto;
import com.yungu.swift.system.finance.model.dto.FinanceJoinRefundDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 描述：通用订单类型（专车，出租车，快车）的订单详情 <br>
 *
 * @author Zerrion
 * @date 2017/8/8
 */
@Data
public class AdminGeneralOrderDetailVo extends BaseVo {

    @ApiModelProperty(value = "订单UUID")
    private String orderUuid;

    @ApiModelProperty(value = "订单子状态")
    private String subStatus;

    @ApiModelProperty(value = "订单编号")
    private String orderNo;

    @ApiModelProperty(value = "外部订单号")
    private String extOrderId;

    @ApiModelProperty(value = "下单人姓名")
    private String passengerName;

    @Desensitization(type = Desensitization.DesensitionType.MOBILE)
    @ApiModelProperty(value = "下单人电话")
    private String passengerMobile;

    @ApiModelProperty(value = "下单出发地地址")
    private String originAddress;

    @ApiModelProperty(value = "下单出发地详细地址")
    private String originDetailAddress;

    @ApiModelProperty(value = "下单目的地地址")
    private String destAddress;

    @ApiModelProperty(value = "下单目的地详细地址")
    private String destDetailAddress;

    @ApiModelProperty(value = "预计出发时间(用车时间)")
    private Date departTime;

    @ApiModelProperty(value = "用车人姓名")
    private String actPassengerName;

    @Desensitization(type = Desensitization.DesensitionType.MOBILE)
    @ApiModelProperty(value = "用车人电话")
    private String actPassengerMobile;

    @ApiModelProperty(value = "预估价格", example = "0.0")
    private Double planFare;

    @ApiModelProperty(value = "预估里程费用", example = "0.0")
    private Double planTripFare;

    @ApiModelProperty(value = "优惠券抵扣", example = "0.0")
    private Double planCouponFare;

    @ApiModelProperty(value = "预估里程", example = "0.0")
    private Double planTrip;

    @ApiModelProperty(value = "预估时长")
    private String planDuration;

    @ApiModelProperty(value = "支付时间")
    private Date payTime;

    @ApiModelProperty(value = "实付金额", example = "0.0")
    private Double actualFare;

    @ApiModelProperty(value = "优惠券抵扣金额", example = "0.0")
    private Double couponFare;

    @ApiModelProperty(value = "支付类型")
    private String payType;

    @ApiModelProperty(value = "支付端 (1.乘客，2.司机)", example = "0")
    private Integer paySide;

    @ApiModelProperty(value = "起步费", example = "0.0")
    private Double startFare;

    @ApiModelProperty(value = "总里程", example = "0.0")
    private Double tripDistance;

    @ApiModelProperty(value = "总时长")
    private String tripDuration;

    @ApiModelProperty(value = "等待费", example = "0.0")
    private Double waitFare;

    @ApiModelProperty(value = "等待时长")
    private String waitDuration;

    @ApiModelProperty(value = "超出里程费", example = "0.0")
    private Double overTripFare;

    @ApiModelProperty(value = "超出里程", example = "0.0")
    private Double beyondTrip;

    @ApiModelProperty(value = "超出时长费", example = "0.0")
    private Double overTimeFare;

    @ApiModelProperty(value = "超出时长")
    private String beyondDuration;

    @ApiModelProperty(value = "回空费(远途费)", example = "0.0")
    private Double haulBackFare;

    @ApiModelProperty(value = "回空里程(远途里程)", example = "0.0")
    private Double haulBackTrip;

    @ApiModelProperty(value = "夜间费", example = "0.0")
    private Double nightFare;

    @ApiModelProperty(value = "高峰溢价费", example = "0.0")
    private Double highPremiumFare;

    @ApiModelProperty(value = "取消费", example = "0.0")
    private Double cancelFare;

    @ApiModelProperty(value = "调度费", example = "0.0")
    private Double tip;

    @ApiModelProperty(value = "派单时间")
    private Date distributeTime;

    @Desensitization(type = Desensitization.DesensitionType.NAME)
    @ApiModelProperty(value = "司机姓名")
    private String driverName;

    @Desensitization(type = Desensitization.DesensitionType.MOBILE)
    @ApiModelProperty(value = "司机电话")
    private String driverMobile;

    @ApiModelProperty(value = "车牌号")
    private String plateNum;

    @ApiModelProperty(value = "车型")
    private String modelName;

    @ApiModelProperty(value = "司机出发去接乘客时间")
    private Date driverDepartTime;

    @ApiModelProperty(value = "司机到达接驾地点时间")
    private Date driverArriveTime;

    @ApiModelProperty(value = "乘客上车时间")
    private Date passengerArriveTime;

    @ApiModelProperty(value = "到达目的地时间")
    private Date arriveTime;

    @ApiModelProperty(value = "确认费用时间")
    private Date confirmTime;

    @ApiModelProperty(value = "订单金额", example = "0.0")
    private Double orderFare;

    @ApiModelProperty(value = "评价时间")
    private Date evaluationTime;

    @ApiModelProperty(value = "评分")
    private String evaluateScore;

    @ApiModelProperty(value = "评价标签")
    private String evaluateTag;

    @ApiModelProperty(value = "评价内容")
    private String evaluateContent;

    @ApiModelProperty(value = "取消时间")
    private Date cancelTime;

    @ApiModelProperty(value = "关闭时间")
    private Date closeTime;

    @ApiModelProperty(value = "关闭理由")
    private String closeReason;

    @ApiModelProperty(value = "关闭用户")
    private String closeUser;

    @ApiModelProperty(value = "乘客UUID")
    private String passengerUuid;

    @ApiModelProperty(value = "司机UUID")
    private String driverUuid;

    @ApiModelProperty(value = "取消理由")
    private String cancelReason;

    @ApiModelProperty(value = "高速费", example = "0")
    private Integer highwayFare;

    @ApiModelProperty(value = "路桥费", example = "0")
    private Integer roadBridgeFare;

    @ApiModelProperty(value = "其他费用", example = "0")
    private Integer otherFare;

    @ApiModelProperty(value = "订单数据检验")
    private String orderValidJson;

    @ApiModelProperty(value = "订单费用数据检验")
    private String orderFareValidJson;

    @ApiModelProperty(value = "确认费用时候的订单费用")
    private BigDecimal confirmOrderFare;

    @ApiModelProperty(value = "订单模块类型（1：出租车，2：专车，3：拼车，4：快车，5：小件", example = "0")
    private Integer typeModule;

    @ApiModelProperty(value = "订单行程类型（1：用车，2：日租，3：半日租，4：送机，5：接机）", example = "0")
    private Integer typeTrip;

    @ApiModelProperty(value = "订单时效类型（1：实时，2：预约）", example = "0")
    private Integer typeTime;

    @ApiModelProperty(value = "订单车型ID")
    private String carModelUuid;

    @ApiModelProperty(value = "航班号")
    private String flightNumber;

    @ApiModelProperty(value = "异常备注", example = "0")
    private Integer typeAbnormal;

    @ApiModelProperty(value = "额外费用（高速费 + 路桥费 + 其他费用）", example = "0")
    private Integer othersFare;

    @ApiModelProperty(value = "100提交（待支付）、200预约中（已支付）、300预约成功（待安排）、400已安排（待出发）、500行程开始、600行程结束（已完成）", example = "0")
    private Integer joinStatus;

    @ApiModelProperty(value = "订单关闭状态（0正常/已完成 1关闭）", example = "0")
    private Integer closeStatus;

    @ApiModelProperty(value = "订单关闭类型（PAS_CANCEL 乘客主动取消 DRI_CANCEL 司机端取消【预留】 TIME_OUT 超时系统自动取消 ADMIN_CLOSE 后台关闭 默认：null）")
    private String closeType;

    @ApiModelProperty(value = "拼车类型（ 1拼车 2包车）", example = "0")
    private Integer typeJoin;

    @ApiModelProperty(value = "成人乘客数量", example = "0")
    private Integer adultNum;

    @ApiModelProperty(value = "乘客留言")
    private String remark;

    @ApiModelProperty(value = "跨城预约确认时间")
    private Date joinConfirmTime;

    @ApiModelProperty(value = "跨城预约确认人uuid")
    private String joinConfirmUser;

    @ApiModelProperty(value = "订单总费用", example = "0.0")
    private Double totalFare;

    @Desensitization(type = Desensitization.DesensitionType.NAME)
    @ApiModelProperty(value = "寄件人")
    private String senderName;

    @Desensitization(type = Desensitization.DesensitionType.MOBILE)
    @ApiModelProperty(value = "寄件人电话")
    private String senderMobile;

    @Desensitization(type = Desensitization.DesensitionType.NAME)
    @ApiModelProperty(value = "收件人")
    private String receiverName;

    @Desensitization(type = Desensitization.DesensitionType.MOBILE)
    @ApiModelProperty(value = "收件人电话")
    private String receiverMobile;

    @ApiModelProperty(value = "货件信息名称")
    private String parcelInfoName;

    @ApiModelProperty(value = "货件照片")
    @AbsoluteImgPath
    private String parcelPhoto;

    @ApiModelProperty(value = "货件加价", example = "0.0")
    private Double parcelRaisePrice;

    @ApiModelProperty(value = "改价记录")
    private List<OrderOperateLogDto> reassignList;

    @ApiModelProperty(value = "调价记录")
    private List<OrderOperateLogDto> adjustList;

    @ApiModelProperty(value = "订单事件具体地址 —— 高德")
    private List<OrderEventPoint> orderEventPointList;

    @ApiModelProperty(value = "订单轨迹")
    private List<DriverLocation> wayPoints;

    @ApiModelProperty(value = "司机接单")
    private OrderLocationVo takeOrderPoint;

    @ApiModelProperty(value = "司机出发")
    private OrderLocationVo driverDeparPoint;

    @ApiModelProperty(value = "司机确认费用/轨迹终点")
    private OrderLocationVo confirmFarePoint;

    @ApiModelProperty(value = "司机取消")
    private OrderLocationVo driverCancelPoint;

    @ApiModelProperty(value = "乘客实际上车点")
    private OrderLocationVo pickUpPoint;

    @ApiModelProperty(value = "乘客实际下车点")
    private OrderLocationVo getOffPoint;

    @ApiModelProperty(value = "乘客取消")
    private OrderLocationVo passengerCancelPoint;

    @ApiModelProperty(value = "司机去接乘客轨迹")
    private List<OrderLocationVo> pickUpPassengerPoints;

    @ApiModelProperty(value = "订单计费轨迹")
    private List<OrderLocationVo> billingPoints;

    @ApiModelProperty(value = "乘客下车到司机确认费用轨迹")
    private List<OrderLocationVo> endOrderPoints;

    @ApiModelProperty(value = "退款记录")
    private FinanceJoinRefundDto financeJoinRefundDto;

    @ApiModelProperty(value = "预估路线字符串")
    private String planRoute;

    @ApiModelProperty(value = "预估路线集合")
    private List<LatLngDto> planRouteList;

    @ApiModelProperty(value = "出发地经度")
    private Double originLng;

    @ApiModelProperty(value = "出发地纬度")
    private Double originLat;

    @ApiModelProperty(value = "目的地经度")
    private Double destLng;

    @ApiModelProperty(value = "目的地纬度")
    private Double destLat;
}
